package edu.pe.cayetano.view.action;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.RowSetDynaClass;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.model.bo.EstadoBO;
import edu.pe.cayetano.model.bo.PerfilBO;
import edu.pe.cayetano.model.bo.UsuarioBO;
import edu.pe.cayetano.model.to.UsuarioTO;
import edu.pe.cayetano.seccd.constantes.ConstantesListas;
import edu.pe.cayetano.seccd.constantes.ConstantesMensajes;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.EscribeLog;
import edu.pe.cayetano.util.Utilitario;
import edu.pe.cayetano.util.UtilitarioSession;

public class UsuarioAction extends BaseAction{
	
	private String page=ConstantesSECCD.EXITO;
	
	public ActionForward listarUsuarios(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		String 					campo 	 	= "todos";
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= new UsuarioBO();
		ArrayList				resultSet	= null;
		try {
			System.out.println("[SECCD][UsuarioAction][listarUsuarios] inicio de metodo");
			HttpSession session = request.getSession(false);
			ret = usuarioBO.listarUsuario();
			if(ret.getCode()==0 && ret.getObject()!=null){
				page="lista";
				resultSet	= (ArrayList)ret.getObject();
				UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
				session.setAttribute("results",resultSet);
				session.setAttribute("optCampo",campo);
				session.setAttribute("operacion","listado");
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","listarUsuarios",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_USUARIO_LISTAR);
				mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			System.out.println("[SECCD][UsuarioAction][listarUsuarios] error generado por:"+e.getMessage());
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","listarUsuarios",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_USUARIO_LISTAR);
			mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		System.out.println("[SECCD][UsuarioAction][listarUsuarios] page:<"+page+">");
		return mapping.findForward(page);	
	}

	public ActionForward buscarUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret			= new BResult();
		UsuarioBO			usuarioBO 	= new UsuarioBO();
		ArrayList			resultSet	= null;
		try {
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			
			ret = usuarioBO.buscarUsuarioxWebService(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page="lista";
				resultSet	= (ArrayList)ret.getObject();
				UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
				session.setAttribute("optCampo",Utilitario.getPropertyDynaBean(dyna, "optCampo"));
				session.setAttribute("criterio",Utilitario.getPropertyDynaBean(dyna, "criterio"));
				//session.setAttribute("operacion",(String)dyna.get("operacion"));
				session.setAttribute("results",resultSet);
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","listarUsuarios",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_USUARIO_LISTAR);
				mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_BUSQUEDA,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward cargaInsertar(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					retP		= new BResult();
		PerfilBO				perfilBO    = new PerfilBO();
		try{
			retP = perfilBO.getPerfiles();
			if(retP.getCode()==0 && retP.getObject()!=null){
				page="cargar";
				request.setAttribute(ConstantesListas.LISTA_PERFILES, (ArrayList<?>)retP.getObject());
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,retP.getMessage());
				mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch(Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_CARGA_EDITA_USUARIO);
			mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}

	public ActionForward cargaEditaUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		System.out.println("[UsuarioAction] ejecutando el metodo cargaEditaUsuario");
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= null;
		try {
			usuarioBO 	= new UsuarioBO();
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = usuarioBO.buscarUsuarioEspecifico(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				BResult					retP		= new BResult();
				PerfilBO				perfilBO    = new PerfilBO();
				retP = perfilBO.getPerfiles();
				if(retP.getCode()==0 && retP.getObject()!=null){
					BResult					retE		= new BResult();
					EstadoBO				estadoBO    = new EstadoBO();
					retE = estadoBO.getEstados(ConstantesSECCD.OPT_USUARIO);
					if(retE.getCode()==0 && retE.getObject()!=null){
						page="cargar";
						EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.EXITO,ConstantesMensajes.EXITO_CARGA_EDITA_USUARIO);
						request.setAttribute(ConstantesListas.LISTA_ESTADOS, (ArrayList<?>)retE.getObject());
						request.setAttribute(ConstantesListas.LISTA_PERFILES, (ArrayList<?>)retP.getObject());
						request.setAttribute("usuarioTO", (UsuarioTO)ret.getObject());
						request.setAttribute("perfil_usuario", ((UsuarioTO)ret.getObject()).getPerfil());
						request.setAttribute("estado_usuario", ((UsuarioTO)ret.getObject()).getEstado());
					}
					else{
						page=ConstantesSECCD.ERROR;
						EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ret.getMessage());
						mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
					}			
				}
				else{
					page=ConstantesSECCD.ERROR;
					EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ret.getMessage());
					mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
				}			
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_CARGA_EDITA_USUARIO);
			mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward grabaEditaUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= null;
		try {
			usuarioBO 	= new UsuarioBO();
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = usuarioBO.grabaEditaUsuario(dyna);
			if(ret.getCode()==0){
				page=ConstantesSECCD.EXITO;
				EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.EXITO,ConstantesMensajes.EXITO_EDITA_USUARIO);
				mostrarMensaje(request,ConstantesMensajes.EXITO_EDITA_USUARIO,new String[0],"listarUsuarios.do","listarUsuarios");
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_USUARIO_LISTAR);
				mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_EDITAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.ERROR,e.getMessage());
			mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_EDITAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}

	public ActionForward grabaInsertaUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= null;
		try {
			usuarioBO 	= new UsuarioBO();
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = usuarioBO.grabaInsertaUsuario(dyna);
			if(ret.getCode()==0){
				page=ConstantesSECCD.EXITO;
				EscribeLog.escribeLog("UsuarioAction","grabaInsertaUsuario",ConstantesSECCD.EXITO,ConstantesMensajes.EXITO_USUARIO_INSERTAR);
				mostrarMensaje(request,ConstantesMensajes.EXITO_USUARIO_INSERTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","grabaInsertaUsuario",ConstantesSECCD.ERROR,ConstantesMensajes.ERROR_USUARIO_INSERTAR);
				mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_INSERTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.ERROR,e.getMessage());
			mostrarMensaje(request,ConstantesMensajes.ERROR_USUARIO_INSERTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}
	
	
	public ActionForward volverUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		page="lista";
		return mapping.findForward(page);	
	}
}
